<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
    /*
      请封装一个函数,可以按照以下调用的方式进行求和
        - add(1,2,3)
        - add(1,2)(3)
        - add(1)(2,3)
        - add(1)(2)(3)
        - add(1,2)(2,2)(3,2)....

        能实现链式调用,返回的必定是函数
    */

    function add(...args) {
        let num = 0
        //剩余参数返回的是参数组成的数组,可以用reduce进行遍历累加
       num = args.reduce((prev,item) => item + prev,0)

        //返回的函数
        const temp = (...args) => {
            //第二次调用时
            num = args.reduce((prev,item) => item + prev,0)
            //后面可能有3,4,5,6....调用
            // 所以返回的仍然是一个有加法功能的函数
            return temp
        }

        //判断什么时候所有的调用执行结束,当返回的temp不是一个函数,而是字符串时,此时应返回计算结果
        //改写函数中的图String方法,把其转字符串的功能替换成返回计算结果
        temp.toString = function(){
            return num
        }

        return temp
    }

    // console.log(add(1,2,3))//(...args) => { // console.log(num);}返回的不是函数,是字符串,表示没有参数需要进行计算了


   

    </script>
</body>

</html>